#include <iostream>
#include <string>
#include <vector>
#include <regex>

using namespace std;

string s;

// 计算表达式的结果
long long calcExpStr(string exp) {
    // 在表达式结尾追加"+0"是为了避免后面收尾操作
    exp += "+0";

    vector<long long> stack;
    string numStr;

    long long num_coef = 1;

    // 如果合法的表达式可以+或-开头
    char start = exp[0];
    if (start == '+' || start == '-') {
        // 将exp开头的符号去掉
        exp = exp.substr(1);
    }

    if (start == '-') {
        // 如果表达式开头是负号，则开头操作数的系数为-1
        num_coef = -1;
    }

    for (char c : exp) {
        if (c >= '0' && c <= '9') {
            numStr.push_back(c);
            continue;
        }

        // 如果扫描到的字符c是运算符，那么该运算符打断了前面操作数的扫描，前面操作数 = 系数 * 值
        long long num = num_coef * stoll(numStr);
        stack.push_back(num);

        // 清空缓存容器，用于下一个操作数的”值“记录
        numStr.clear();

        if (c == '+') {
            // 如果运算符是加法，则后一个操作数的系数为1
            num_coef = 1;
        } else if (c == '-') {
            // 如果运算符是减法，则后一个操作数的系数为-1
            num_coef = -1;
        } else if (c == '*') {
            // 如果运算符是乘法，则后一个操作数的系数为栈顶值
            num_coef = stack.back();
            stack.pop_back();
        }
    }

    // 表达式分块后，每一块独立计算，所有块的和就是表达式的结果
    long long res = 0;
    for (long long num : stack) {
        res += num;
    }

    return res;
}

// 获取最长合法表达式
string getMaxLenExp() {
    regex pattern("([+-]?(?:\\d+[+*-])*\\d+)");
    smatch match;

    string maxLenExp = "";

    while (regex_search(s, match, pattern)) {
        string exp = match.str();
        if (exp.length() > maxLenExp.length()) {
            maxLenExp = exp;
        }
        s = match.suffix().str();
    }

    return maxLenExp;
}

// 算法入口
long long getResult() {
    string maxLenExp = getMaxLenExp();

    if (maxLenExp.empty()) {
        return 0;
    } else {
        return calcExpStr(maxLenExp);
    }
}

int main() {
    getline(cin, s);
    cout << getResult() << endl;

    return 0;
}
